package com.leadCode.easy.math;

import org.junit.Test;

import java.util.LinkedList;

/**
 * 剑指 Offer 14- I. 剪绳子
 * 给你一根长度为 n 的绳子，请把绳子剪成整数长度的 m 段（m、n都是整数，n>1并且m>1），
 * 每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少？
 * 例如，当绳子的长度是8时，我们把它剪成长度分别为2、3、3的三段，此时得到的最大乘积是18。
 */
public class CuttingRope {


    /**
     * 以数学公式推导，每节绳子的最佳长度约为 2.7，题目要求为整数，即为2或者3
     * 找几个数验证了一下3最佳，2次之
     * 特殊数字处理：
     * 小于等于3时，直接进行次方运行得到的结果错误，需特殊处理
     * 余数为1时，乘以1等于原值，浪费一个数值不是最优解，因此改为乘以4
     */
    public int cuttingRope(int n) {
        int yushu = n % 3;
        int chushu = n / 3;

        if (n <= 3) {
            return n - 1;
        }

        if (yushu == 0) {
            // 余数为0
            return (int) Math.pow(3, chushu);
        } else if (yushu == 1) {
            // 余数为1
            return (int) Math.pow(3, chushu - 1) * 4;
        } else {
            // 余数为2
            return (int) Math.pow(3, chushu) * 2;
        }
    }

    /**
     * 将空格替换为指定字符串
     *
     * @param s 源字符串
     * @return 目标字符串
     */
    public String replaceSpace(String s) {
        if (s == null) {
            return s;
        }

        return s.replace(" ", "%20");
    }

    @Test
    public void fun2() {
        System.err.println(replaceSpace("We are happy."));
    }


}
